内核是操作系统的核心,操作系统的基本功能都是由内核提供的。
文件生成和数据包传输等也是通过内核的功能实现的。但这些都不是简单的任务。平时可能意识不到,但这其中确实包含了很多先进技术。例如,在文件系统方面,配置文件时尽量减少磁盘扫描,在网络方面,由于路由表的入口数量庞大,因此设计时尽量保证对系统整体影响较小的设计。在内存管理、进程管理方面也作出了很多努力。解读这种先进技术也是内核构建的魅力之一。
然而,最近的Linux所提供的并不只有基本功能。随着功能的不断发展,现在已经出现了很多特定领域的便捷功能和独特功能。即使是内核黑客也很少有人能够完全掌握。
本书从Linux内核的众多先进功能中选取了一些必备并且有趣的内容进行介绍,同时也对内部的运行机制和结构进行了阐述。此外,本书还介绍了熟练使用这些功能所需的工具、设置方法以及调整方法等。省电就是其中一项内容。除了使用方法以外,本书还介绍了省电的理念、与硬件的关系等。此外,还提到了当前广受关注的虚拟化、资源管理、标准文件系统中所采用的ext4等已有功能和新功能。对于已有功能,本书结合最新的源码,介绍它的更改内容和新增功能。其中也包括文档中没有记载,且必须对内核内部有一定理解才能得知的信息,因此,即使是比较了解这个功能的人也可能会有新的发现。另外,本书还介绍了内核的相关工具,其中gcore在重要的系统中就是非常可靠的工具。
最新的Linux内核中安装了强大的追踪、概要分析功能,具备很多方便实用的功能。这些功能不仅能够很方便地达到预期的目的,而且对于分析内核功能也非常有用。甚至对于内核构建的高手也有一定帮助。
全书列举了非常多的实例,让读者更快地学会如何使用。对于想要熟练使用内核的读者来说,本书也是非常好的参考书。
目 录O’Reilly Media, Inc.介绍编者与作者介绍主编简介作者简介撰稿人简介技术审校者简介致谢主编致辞前言本书主要内容本书使用方法本书约定意见与提问第1章 内核入门HACK#1如何获取Linux内核内核的种类Linus树如何获取上游内核如何获取发布版内核Ubuntu小结参考文献HACK#2 如何编译Linux内核内核编译的过程需要的源码包编译、安装上游内核生成内核包在源码树外编译模块交叉编译内核小结参考文献HACK#3 如何编写内核模块内核模块通过内核配置编写模块编写特有的内核模块添加内核模块小结参考文献HACK#4 如何使用Git分布式仓库型SCM在本地仓库进行操作与远程仓库进行共同作业将开发分支rebase到最新状态其他有用的命令小结HACK#5 使用checkpatch.pl检查补丁的格式检查格式的示例使用checkpatch.pl输出的主要错误或警告小结参考文献HACK#6 使用localmodconfig缩短编译时间localmodconfig的使用方法localmodconfig的效果localmodconfig的结构小结第2章 资源管理HACK#7 Cgroup、Namespace、Linux容器CgroupNamespaceLinux容器小结参考文献HACK#8 调度策略调度策略关于调度策略的系统调用chrt命令小结参考文献HACK#9 RT Group Scheduling与RT Throttling实时RT Throttling小结参考文献HACK#10 Fair Group SchedulingFair Group SchedulingFair Group Scheduling的使用方法小结HACK#11 cpuset用法小结HACK#12 使用Memory Cgroup限制内存使用量Memory Cgroup用法限制内存使用量层次结构显示统计信息小结参考文献HACK#13 使用Block I/O控制器设置I/O优先级使用Block I/O控制器的前提条件尝试使用Block I/O控制器Block I/O控制器提供的特殊文件关于Block I/O控制器的CFQ设置用虚拟文件限制事项小结参考文献HACK#14 虚拟存储子系统的调整虚拟空间存储方式虚拟空间超额使用量的调整小结HACK#15 ramzswap使用论坛版ramzswapramzswap disk的使用方法backing swap的使用方法使用上游内核的ramzswap小结参考文献HACK#16 OOM Killer的运行与结构确认运行、日志进程的选定方法计算分数的方法关于OOM Killer的proc文件系统RHEL5的特征RHEL4的运行小结参考文献第3章 文件系统HACK#17 如何使用ext4ext4的生成与挂载关于mount选项开发版ext4的获取方法小结参考文献HACK#18 向ext4转换转换关于功能标志小结参考文献HACK#19 ext4的调整小结参考文献HACK#20 使用fio进行I/O的基准测试安装fio基本执行方法模拟实验的例子和输出的意义小结HACK#21 FUSEFUSE概要安装FUSE文件系统卸载使用FUSE的文件系统小结参考文献第4章 网络HACK#22 如何控制网络的带宽设置带宽控制启动脚本确认带宽控制小结参考文献HACK#23 TUN/TAP设备TUN/TAP设备TUN设备TAP设备应用程序示例使用TUN/TAP设备的程序设计示例小结HACK#24 网桥设备brctl命令使用网桥功能的示例网桥的设置RedHat系列的情况虚拟机的网桥连接小结HACK#25 VLAN使用命令进行设置使用设置文件进行设置MAC-VLAN参考文献HACK#26 bonding驱动程序使用方法关于激活备份模式参考文献HACK#27 Network Drop Monitordropwatch的使用方法小结参考文献第5章 虚拟化HACK#28 如何使用XenXen的概要Xen的半虚拟化客户端的使用方法Xen的全虚拟化客户端的使用方法小结HACK#29 如何使用KVMKVM的概要KVM的使用方法KVM的网络选项小结参考文献HACK#30 如何不使用DVD安装操作系统需要的准备小结HACK#31 更改虚拟CPU分配方法,提高性能使用virt-manager的物理CPU分配方法概要分析小结参考文献HACK#32 如何使用EPT提高客户端操作系统的性能MMU影子页表EPT如何使用EPT小结参考文献HACK#33 使用IOMMU提高客户端操作系统运行速度虚拟环境下客户端操作系统的I/O方式关于DMAIOMMUKVM的IOMMU的使用方法Xen的IOMMU的使用方法小结参考文献HACK#34 使用IOMMU SR-IOV提高客户端操作系统速度SR-IOVSR-IOV的功能在KVM中使用SR-IOV的方法小结HACK#35 SR-IOV带宽控制Intel 82576的带宽控制Intel 82576的带宽控制的使用方法尝试测量带宽小结参考文献HACK#36 使用KSM节约内存使用方法sysfs小结参考文献HACK#37 如何挂载客户端操作系统的磁盘guestfishlomountkpartx小结参考文献HACK#38 从客户端操作系统识别虚拟机环境CPUID命令固有文件ACPI DSDT/FADT的OEM IDSystem Management BIOS(SMBIOS)virt-what小结参考文献HACK#39 如何调试客户端操作系统Xen的情况KVM的情况小结参考文献第6章 省电HACK#40 ACPIACPI的用语G状态与S状态D状态C状态P状态ACPI的结构两个编程模型ACPI寄存器ACPI系统描述表ACPI命名空间和AML(ASL)查看ACPI的表小结参考文献HACK#41 使用ACPI的S状态S3状态的使用方法S3状态的结构S4状态的使用方法小结HACK#42 使用CPU省电(C、P状态)C状态的使用方法P状态的使用方法小结参考文献HACK#43 PCI设备的热插拔Hot-add的流程Hot-remove的流程确认热插拔功能Linux的热插拔子系统小结HACK#44 虚拟环境下的省电虚拟环境下的省电思想Xen的P状态Xen的C状态KVM的C/P状态小结参考文献HACK#45 远程管理机器的电源Wake On LANIPMI小结参考文献HACK#46 USB的电力管理概要设置方法小结参考文献HACK#47 显示器的省电显示器的电源控制显示器的亮度控制小结参考文献HACK#48 通过网络设备节省电能禁用WOL降低速度进行改造小结参考文献HACK#49 关闭键盘的LED来省电PS/2键盘各式各样的键盘参考文献HACK#50 PowerTOP概要PowerTOP的详细情况和结构小结参考文献HACK#51 硬盘的省电LPM显示正在使用的硬盘信息关于省电的设置关于I/O性能的设置参考文献第7章 调试HACK#52 SysRq键使用方法SysRq键的输入方法SysRq命令键上游内核的SysRq键显示的例子各种情况下的使用方法小结参考文献HACK#53 使用diskdump提取内核崩溃转储内核崩溃转储diskdump的限制事项启用diskdump使用压缩和部分转储功能缩小转储文件的大小发生故障时通过邮件通知将转储输出到的设备冗长化小结参考文献HACK#54 使用Kdump提取内核崩溃转储启用崩溃转储使用makedumpfile缩小转储的文件大小向远程服务器传输崩溃转储小结参考文献HACK#55 崩溃测试小结HACK#56 IPMI看门狗计时器IPMI看门狗计时器IPMI看门狗计时器的使用方法设置示例确认运行其他看门狗计时器参考文献HACK#57 NMI看门狗计时器NMI看门狗计时器NMI看门狗计时器的使用方法关于NMI的其他参数HACK#58 soft lockupsoft lockup的结构soft lockup的设置soft lockup的确认锁定检测的限制避免soft lockup的错误检测小结HACK#59 crash命令支持范围安装与启动的方法实用工具命令(utility command)参照内核信息的命令扩展命令crash选项参考文献HACK#60 核心转储过滤器使用方法sysctl小结参考文献HACK#61 生成用户模式进程的进程核心转储使用案例安装使用crash参照用户进程的符号信息的方法支持范围注意事项参考文献HACK#62 使用lockdep查找系统的死锁lockdep的结构创建启用了lockdep的内核尝试使用lockdep功能小结参考文献HACK#63 检测内核的内存泄漏编译内核使用方法小结参考文献第8章 概要分析与追踪HACK#64 使用perf tools的概要分析(1)perf tools确认perf tools的运行小结参考文献HACK#65 使用perf tools的概要分析(2)使用perf进行概要分析的步骤进行缓存未命中的概要分析小结HACK#66 进行内核或进程的各种概要分析使用perf stat获取综合统计信息使用perf script进行追踪使用自己的脚本处理数据小结参考文献HACK#67 追踪内核的函数调用ftrace创建启用ftrace的内核操作ftrace的debugfs接口使用ftrace追踪函数调用小结参考文献HACK#68 ftrace的插件追踪器获取函数的调用关系进行函数的概要分析调查占用内核栈最大的位置测量中断的延迟小结参考文献HACK#69 记录内核的运行事件调查可使用的追踪事件调查事件的格式控制事件使用ftrace的事件加强其他的追踪器输出小结参考文献HACK#70 使用trace-cmd的内核追踪trace-cmd的获取与创建使用trace-cmd进行追踪使用trace-cmd进行后台追踪使用trace-cmd结束追踪使用trace-cmd获取远程机器的追踪小结HACK#71 将动态追踪事件添加到内核中动态追踪事件经由ftrace将动态追踪事件添加到内核中使用perf probe将动态追踪事件添加到内核中启用调试信息和动态追踪事件构建内核perf probe的使用方法小结参考文献HACK#72 使用SystemTap进行内核追踪概述准备样本脚本测量时间定义探测点尝试执行小结参考HACK#73 使用SystemTap编写对话型程序使用SystemTap进行输出界面控制使用SystemTap接受来自键盘、鼠标的输入小结参考文献HACK#74 SystemTap脚本的重复利用使用别名分离逻辑编写TapsetSystemTap脚本的Shebang小结HACK#75 运用SystemTap在后台执行SystemTap将SystemTap作为服务启动小结参考资料
评论